package com.gsbelarus.gedemin.lib.ui;

import android.content.Intent;
import android.os.Bundle;

import java.util.Calendar;

/**
 * Класс, считывающий и хранящий все возможные передаваемые параметры
 */
public class ArgumentsHelper {

    /**
     * агрументы для фрагментов и активностей
     */
    public int id = 1;
    public int selectedDay = 1;
    public int selectedMonth = 1;
    public int selectedYear = 2014;
    public String clientName = null;

    /**
     * агрументы для фрагмента с жестами
     */
    public String className = "";
    public int slidingDate = Calendar.DATE;

    /**
     * константы для сохранения аргументов
     */
    public static final String SELECTED_DAY = "selectedDay";
    public static final String SELECTED_MONTH = "selectedMonth";
    public static final String SELECTED_YEAR = "selectedYear";
    public static final String CLIENT_NAME = "clientName";
    public static final String ID = "ID";

    public static final String CLASS_NAME = "className";
    public static final String SLIDING_DATE = "slidingDate";

    /**
     * Чтение аргументов пришедших из другого фрагмента или активности
     *
     * @return true - параметры есть и их можно использовать, false - параметров нет
     */
    public boolean readParams(Bundle arguments) {
        boolean flag = false;
        if (arguments != null) {

            if (arguments.containsKey(CLIENT_NAME)) {
                clientName = arguments.getString(CLIENT_NAME);
                flag = true;
            }
            if (arguments.containsKey(SELECTED_DAY)) {
                selectedDay = arguments.getInt(SELECTED_DAY);
                flag = true;
            }
            if (arguments.containsKey(SELECTED_MONTH)) {
                selectedMonth = arguments.getInt(SELECTED_MONTH);
                flag = true;
            }
            if (arguments.containsKey(SELECTED_YEAR)) {
                selectedYear = arguments.getInt(SELECTED_YEAR);
                flag = true;
            }
            if (arguments.containsKey(ID)) {
                id = arguments.getInt(ID);
                flag = true;
            }

        } else
            flag = false;
        return flag;
    }

    /**
     * Чтение аргументов пришедших в активность
     */
    public void readParams(Intent arguments) {
        if (arguments != null) {

            clientName = arguments.getStringExtra(CLIENT_NAME);
            selectedDay = arguments.getIntExtra(SELECTED_DAY, 1);
            selectedMonth = arguments.getIntExtra(SELECTED_MONTH, 1);
            selectedYear = arguments.getIntExtra(SELECTED_YEAR, 2014);
            id = arguments.getIntExtra(ID, 0);
        }
    }

    /**
     * сохраняет текущие параметры вместе с другой датой
     */
    public Bundle putParams(Calendar date) {
        Bundle arguments = new Bundle();

        int day = date.get(Calendar.DAY_OF_MONTH);
        int month = date.get(Calendar.MONTH) + 1;
        int year = date.get(Calendar.YEAR);

        saveParams(arguments, day, month, year);

        return arguments;
    }

    /**
     * сохраняет текущие параметры
     */
    public Bundle saveParams(Bundle arguments) {
        saveParams(arguments, selectedDay, selectedMonth, selectedYear);
        return arguments;
    }

    public Intent saveParams(Intent intent) {
        saveParams(intent, selectedDay, selectedMonth, selectedYear);
        return intent;
    }

    /**
     * сохраняет текущие параметры вместе с другой датой
     */
    private void saveParams(Intent intent, int day, int month, int year) {
        intent.putExtra(ID, id);
        intent.putExtra(CLIENT_NAME, clientName);
        intent.putExtra(SELECTED_DAY, day);
        intent.putExtra(SELECTED_MONTH, month);
        intent.putExtra(SELECTED_YEAR, year);
    }

    /**
     * сохраняет текущие параметры вместе с другой датой
     */
    private void saveParams(Bundle arguments, int day, int month, int year) {
        arguments.putInt(ID, id);
        arguments.putString(CLIENT_NAME, clientName);
        arguments.putInt(SELECTED_DAY, day);
        arguments.putInt(SELECTED_MONTH, month);
        arguments.putInt(SELECTED_YEAR, year);
    }

    public void readViewPagerInfo(Bundle arguments) {
        if (arguments != null) {
            if (arguments.containsKey(SLIDING_DATE))
                slidingDate = arguments.getInt(SLIDING_DATE);
            if (arguments.containsKey(CLASS_NAME))
                className = arguments.getString(CLASS_NAME);
        }
    }

    public static Bundle putViewPagerInfo(Bundle arguments, String className, int slidingDate) {
        if (arguments == null)
            arguments = new Bundle();

        arguments.putString(CLASS_NAME, className);
        arguments.putInt(SLIDING_DATE, slidingDate);

        return arguments;
    }
}
